package br.com.intelsys.basics.spring;

import java.io.IOException;
import java.util.Properties;

import org.apache.log4j.Logger;

public class PathFinder {
	private static String propertiesFile = "/pathfinder.properties";
	private static Properties prop;
	private static Logger log = Logger.getLogger(PathFinder.class);

	public enum SysKey {
		HOST("pathfinder.system.host"), APP_ROOT("pathfinder.system.appRoot");
		private String value;

		SysKey(String name) {
			this.value = name;
		}

		public String toString() {
			return value;
		}

	}

	/**
	 * Define o arquivo com as propriedades de acesso das redes sociais
	 * 
	 * @param key
	 * @return Conteudo da chave ou null caso ela nao tenha sido encontrada
	 */
	public String getProp(String key) {
		String ret = null;
		if (prop == null) {
			if (log.isDebugEnabled()) {
				log.debug("Carregando o arquivo de propriedades " + propertiesFile);
			}
			prop = System.getProperties();
			try {
				prop.load(PathFinder.class.getResourceAsStream(propertiesFile));
			} catch (NullPointerException e) {
				if (log.isDebugEnabled()) {
					log.debug("O arquivo de propriedades " + propertiesFile + " nao foi encontrado no classpah.");
				}
			} catch (IOException e) {
				if (log.isDebugEnabled()) {
					log.debug("Nao foi encontrada a chave " + key + " no arquivo de propriedades " + propertiesFile);
				}
				return null;
			}
		}
		ret = prop.getProperty(key);
		if (log.isDebugEnabled()) {
			log.debug("Buscando o conteudo da chave " + key + " nos Properties: " + ret);
		}
		return ret;
	}

	public String getPath(SysKey sysKey) {
		return getPath(sysKey.toString(), (Object[]) null);
	}

	public String getPath(String key) {
		return getPath(key, (Object[]) null);
	}

	public String getPath(String key, Object... param) {
		String path = getProp(key);
		if (path != null && param != null) {
			int i = 1;
			for (Object p : param) {
				path = path.replaceFirst("\\{" + i++ + "\\}", p != null ? p.toString() : "");
			}
		}
		return path;
	}
}
